package com.riant.dayo2.demo4;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @Classname Test
 * @Description TODO
 * @Date 2021/2/27 10:16
 * @Created by 张斌
 */
public class Test {
    public static void main(String[] args) {
        //testArr();
        //testArrayList1();
        testArrayList2();
    }

    public static void testArr() {
        /**
         * 数组是一种线性数据结构，元素前后最多只有一个节点，
         * 创建数组有两种方式，new int[length],只是设置了数组长度
         * {1,2,3}，不仅设置了长度，还初始化了数组元素的值
         * */
        int[] arr=new int[3];
        int[] arr2={1,2,3};
        Arrays.sort(arr2);
    }

    public void testArray2(){
        ArrayList<Integer> arrayList=new ArrayList<Integer> ();
        int[] arr={1,2,3,4,5,6,7,8,9,10};
    }
    public static void testArrayList1(){
        Integer[] arr={1,2,3,4,5,6,7,8,9,10};

        //ArrayList<Integer> arrayList1= (ArrayList<Integer>) Arrays.asList(arr);
        //
        /**
         * public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}
         * 返回的ArrayList不是java.util.ArrayList，而是定义在java.util.Arrays中一个私有静态类。
         * asList返回的是由原始数组支持的固定大小的列表。
         * 这种情况下，如果添加或删除列表中的元素，程序会抛出异常UnsupportedOperationException。
         * */
        List<Integer> list=  Arrays.asList(arr);
        ArrayList arrayList=new ArrayList (list);
        arrayList.add(10);
        arrayList.add(101);
        System.out.println(arrayList.size());
        System.out.println(getCapacity(arrayList));
        arrayList.trimToSize();
        System.out.println(getCapacity(arrayList));
        Iterator<Integer> iterator=arrayList.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }

    public static void testArrayList2(){
        Integer[] arr={1,2,3,4,5,6,7,8,9,10};
        List<Integer> list= (List<Integer>) Arrays.asList(arr);
        ArrayList arrz=new ArrayList(Arrays.asList(arr));
        arrz.add(10);
        arrz.add(20);
        System.out.println(arrz.size());
        System.out.println(getCapacity(arrz));
        arrz.trimToSize();
        System.out.println(getCapacity(arrz));
        int  a=new Integer(5).intValue();
    }

    public static int getCapacity(ArrayList list){
        try{
            Class cls=list.getClass();
            Field field=cls.getDeclaredField("elementData");
            field.setAccessible(true);
            Object[] obj = (Object[]) field.get(list);
            return obj.length;
        }catch (Exception e){
            e.printStackTrace();
            return  -1;
        }
    }
}
